package com.bjsxt;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class TestIteratorRemove {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        /*不可以在for循环中直接删除元素，会连后面的都删除，因为数组删除后，后面的会补上*/
        /*for (int i=0;i< list.size();i++){
            list.remove(2);
            System.out.println(list.get(i));// 输出 a  b
        }*/
        //用if可以
        /*for(int i=0;i< list.size();i++){
            if("c".equals(list.get(i))){
                list.remove(i);
            }
        }*/
        //假设修正法
        /*int flag=-1;
        for(int i=0;i< list.size();i++){
            //这样写会进行无限循环，因为list.size会不断增长
            *//*list.add("dd");
            System.out.println(list.get(i));*//*
            if("c".equals(list.get(i))){
                flag=i;
            }
        }
        if(flag>-1){
            list.remove(flag);
        }
        for(String str:list){
            System.out.println(str);
        }*/
        //可以用for each 删除元素  但不可以添加元素,因为for each 底层也是用迭代器来实现
       /* for(String str:list){
         //   list.add("bb"); //并发的修改异常 .ConcurrentModificationException
            if("c".equals(str)){
                list.remove(str);
            }
        }
        for(String str:list){
            System.out.println(str);
        }*/
        //一个迭代器只能用一次，所以下面要用，要重新创建
        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
           /* iterator.next();
            iterator.next(); 不可以在循环中多次调用 指针会不断向下指*/
            String value = iterator.next();
            if("c".equals(value)){
                iterator.remove();
            }
        }
        System.out.println("--------");
        //重新创建迭代器  遍历
        for(Iterator<String> iterator1 = list.iterator();iterator1.hasNext();){
            System.out.println(iterator1.next());
           // list.add("bb");  异常 并发的修改异常
        }
    }
}
